home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #5 / Amiga Plus CD - 2000 - No. 5.iso / Tools / Dev / GameboyDev / GBDK / lib / get_xy_t.s < prev    next >
Text File  |  1999-03-29  |  2KB  |  103 lines

  1.     .include        "global.s"
  2.  
  3.     .area    _CODE
  4.  
  5.     ;; Store window tile table into (BC) at xy = DE of size WH = HL
  6.     ;; WH >= (1,1)
  7. .get_xy_wtt::
  8.     PUSH    HL        ; Store WH
  9.     PUSH    HL        ; Store WH
  10.     LDH    A,(.LCDC)
  11.     BIT    6,A
  12.     JR    NZ,1$
  13.     LD    HL,#0x9800    ; HL = origin
  14.     JR    .get_xy_tt
  15. 1$:
  16.     LD    HL,#0x9C00    ; HL = origin
  17.     JR    .get_xy_tt
  18.     ;; Store background tile table into (BC) at XY = DE of size WH = HL
  19.     ;; WH >= (1,1)
  20. .get_xy_btt::
  21.     PUSH    HL        ; Store WH
  22.     LDH    A,(.LCDC)
  23.     BIT    3,A
  24.     JR    NZ,1$
  25.     LD    HL,#0x9800    ; HL = origin
  26.     JR    .get_xy_tt
  27. 1$:
  28.     LD    HL,#0x9C00    ; HL = origin
  29. ;    JR    .get_xy_tt
  30.  
  31. .get_xy_tt::
  32.     PUSH    BC        ; Store source
  33.     XOR    A
  34.     OR    E
  35.     JR    Z,2$
  36.  
  37.     LD    BC,#0x20    ; One line is 20 tiles
  38. 1$:
  39.     ADD    HL,BC        ; Y coordinate
  40.     DEC    E
  41.     JR    NZ,1$
  42. 2$:
  43.     LD    B,#0x00        ; X coordinate
  44.     LD    C,D
  45.     ADD    HL,BC
  46.  
  47.     POP    BC        ; BC = source
  48.     POP    DE        ; DE = WH
  49.     PUSH    HL        ; Store origin
  50.     PUSH    DE        ; Store WH
  51. 3$:
  52.     LDH    A,(.STAT)
  53.     AND    #0x02
  54.     JR    NZ,3$
  55.  
  56.     LD    A,(HL+)        ; Copy W tiles
  57.     LD    (BC),A
  58.     INC    BC
  59.     DEC    D
  60.     JR    NZ,3$
  61.     POP    HL        ; HL = WH
  62.     LD    D,H        ; Restore D = W
  63.     POP    HL        ; HL = origin
  64.     DEC    E
  65.     JR    Z,4$
  66.  
  67.     PUSH    BC        ; Next line
  68.     LD    BC,#0x20    ; One line is 20 tiles
  69.     ADD    HL,BC
  70.     POP    BC
  71.  
  72.     PUSH    HL        ; Store current origin
  73.     PUSH    DE        ; Store WH
  74.     JR    3$
  75. 4$:
  76.     RET
  77.  
  78. _get_tiles::
  79.     PUSH    BC
  80.  
  81.     LDA    HL,11(SP)    ; Skip return address and registers
  82.     LD    D,(HL)        ; DE = src
  83.     DEC    HL
  84.     LD    E,(HL)
  85.     DEC    HL
  86.     LD    B,(HL)        ; BC = dst
  87.     DEC    HL
  88.     LD    C,(HL)
  89.     LDA    HL,4(SP)    ; Skip return address and registers
  90.     PUSH    DE        ; Store address on stack for set_xy_tt
  91.     LD    D,(HL)        ; D = x
  92.     INC    HL
  93.     LD    E,(HL)        ; E = y
  94.     INC    HL
  95.     LD    A,(HL+)        ; A = w
  96.     LD    L,(HL)        ; L = h
  97.     LD    H,A        ; H = w
  98.  
  99.     CALL    .get_xy_tt
  100.  
  101.     POP    BC
  102.     RET
  103.